24
תגובות
היי. יש לי קובץ בשם config.php (בכוונה .php כי אם זה יהיה .txt אז המשתמש יוכל לצפות בתוכן המסמך).
בקובץ כתוב לי לדוגמה:
username:root


אני רוצה לעשות פונקציה כלשהי שיהיה בה ארגומנט אחד ($val לדוגמה) שבעצם תגיד לי מה שיש אחרי הנקודותיים - במקרה הזה root.
איך אני עושה את זה?
תודה!

24 תשובות

avatar ענה Kzrh ב 25 לינואר 2012 #

ד"א נראה לי שצריך להשתמש ב REGEX

avatar ענה משתמש_93144 ב 25 לינואר 2012 #

ולמה שלא תעשה בקונפיג שלך:

<?php return array('username' => 'root');

ואז תעשה לו פשוט
$config = require 'config.php';

avatar ענה Kzrh ב 25 לינואר 2012 #

אבל לפעמים אני רוצה לשנות את הערכים, אז אני אכתוב על הערך עצמו.
אם אני אעשה את זה במשתנה, לא אוכל לשנות את הערך. אולי אשנה, אבל רק כל עוד השינוי נמצא בקוד. זה לא פיזית ישנה את זה, כך שאוכל להיות בטוח.
אני מתכוון שאם לדוגמה ארצה דרך הלוח ניהול או משהו לשנות, מבלי לגעת בקוד (config.php) אז אוכל. מכוון שארצה לקבל נתונים מ config.php ואקבל לדוגמה root, שבכלל בדף אחר קבעתי שזה יהיה orel לדוגמה.

avatar ענה cthulhu ב 25 לינואר 2012 #

אם זה פורמט קבוע, אז כך את התוכן של הקובץ ותפעיל explode.
אם זה קונפיג, מספיק פשוט ליצור מערך ולאנקלד אותו (לא בהכרח צריך ליצור משתנה חדש כמו שהראו למעלה).

avatar ענה Kzrh ב 25 לינואר 2012 #

צודק אחי! אבל איך אוכל לעשות את ה explode רק איפה שאני בוחר? לדוגמה יש לי מספר שורות, ובכל שורה יש ככה: key:val, ואני ארצה רק איפה שה key יהיה host?
אבל שוב, לא אוכל לאנקלד את הקונפיג מהסיבה שכתבתי למעלה. אם ארצה לשנות את התוכן של הקובץ וכד'?

avatar ענה cthulhu ב 25 לינואר 2012 #

נו אז תשנה, אז מה? את הערך אתה יכול לשנות כמה שבא לך. נניח וה"מפתח" שלך זה host והערך הוא הכתובת של השרת. הרי אתה לא תשנה כל פעם את השם של המפתח? וזה כל התפקיד בעצם של הקונפיג. ניתן לשנות את הערך כמה שבא לך כל עוד המפתח נשאר אותו מפתח. אחרת תצטרך לשנות את זה בכל מקום אחר. אם אתה הולך על explode, אז מה הבעיה? תבדוק איזה ערך בדיוק מכילה השורה ותפעיל את הפונקצייה בהתאם.

avatar ענה משתמש_93144 ב 25 לינואר 2012 #

json_encode / json_encode

avatar ענה Kzrh ב 25 לינואר 2012 #

לא התכוונתי ל json_encode, אבל לא משנה.. נראה לי שאני אלך על השיטה של האינקלוד, אבל יש לי בעיה..
זה הקונפיג:

<?php
return array
(
  'host' => 'localhost',
  'username' => 'root',
  'password' => '',
  'dbname' => 'imgup'
);
?>

אבל אני מקבל שגיאה:
Parse error: syntax error, unexpected T_STRING in C:\wamp\www\imgup\config.php on line 3


(שורה 3 זה בדיוק איפה שמתחיל ה 'host').

avatar ענה cthulhu ב 25 לינואר 2012 #

json בתור קונפיג זה משהו.
אין לך בעיה בקוד. אבל למה שלא תעשה ככה:

<?php
$config = array();
$config['key'] = 'value';

למה ליצור משתנה חדש כל הזמן?

avatar ענה Kzrh ב 25 לינואר 2012 #

אבל אני ארצה להשתמש במשתנה $config הזה בכל מיני דפים כמו sql.class.php, system.class.php, image.class.php, וכו'... כי אם לדוגמה אני עושה את המשתנה הזה ב Index.php וב sql.class.php שזה בתיקייה נפרדת בכלל, אני מנסה לעשות echo למשתנה(לדוגמה ל $config['host']) אז זה לא עובד. אבל אם המשתנה נמצא ב index.php ודרך ה Index.php אני עושה echo זה כן עובד.. כאילו אני צריך שזה יהיה מין משתנה כזה לכל המערכת, גלובאלי כזה.

יכול להיות שהשיטה היא פשוט להשתמש ב $GLOBALS?

avatar ענה cthulhu ב 26 לינואר 2012 #

ההסבר שלך לא מובן. המשתנה הזה יעבוד בכל דף שבו תאנקלד את הקובץ הנ"ל. זה לא יהיה נגיש בטווחים מסוימים כמו למשל פונקציות, שם תצטרך להפעיל global. ובכל מקרה אתה תצטרך להשתמש בזה (global), גם בשיטה הזאת וגם בשיטה האחרת. אם תספק קוד מדוייק שלא עובד אז ניתן יהיה לאמר מה אתה עושה לא נכון.

avatar ענה Kzrh ב 26 לינואר 2012 #

תן לי להבין נכון. אתה מתכוון כאילו לעשות את המשתנה $config בקובץ האינדקס, או בקובץ שונה בשם config.php שאותו אני אאנקלד לכל דף?

ואני בעצם תמיד אצטרך להשתמש ב $GLOBALS מכוון שהכל אצלי זה פונקציות (OOP).

avatar ענה cthulhu ב 26 לינואר 2012 #

אני מתכוון לכך שתיצור קובץ נפרד לקונפיג (config.php לדוגמא) שאותו תאנקלד איפה שצריך. ככה כל בן אדם נורמלי עושה וכן מערכות גדולות.

avatar ענה Kzrh ב 26 לינואר 2012 #

אוקיי, עשיתי. אבל בשביל להשתמש במשתנים אני אצטרך להשתמש ב $GLOBALS.. אין איזו דרך קלה או טובה יותר?

רגע, יש בעיה! עשיתי גם קובץ setup.php שבו אוכל להגדיר את האתר (בפעם הראשונה שמתקינים אותו), ואני ארצה שהפרטים שהמשתמש כותב בטופס, יהיו בעצם בקובץ config.php.. אבל אי אפשר לעשות את זה! מה אני עושה?

avatar ענה משתמש_93144 ב 26 לינואר 2012 #

@ctulhu
מה רע ב json בתור קונפיג? XML זה בסדר ו JSON לא? (שגם עובד הרבה יותר מהר).

@Kzrh
ואתה לא יודע איך לכתוב מחרוזת לקובץ? php.net/file_put_contents

avatar ענה Kzrh ב 26 לינואר 2012 #

אחי עזוב עכשיו את הרעיון עם הקובץ והכל.. אני פשוט רוצה config.php שיהיה בו מערך שבמערך יהיה לדוגמה מפתח בשם host שיהיה שווה ל localhost. לאחר שאבצע בו שינוי באמצעות טופס (setup.php) זה באמת ישתנה. אם אני עושה בקובץ setup.php:

$config['host'] = 'hey';


וב config.php זה בכלל ככה:
$config = array('host' => 'localhost');


אז כשאני אנסה להדפיס את זה (בעזרת ה index.php לדוגמה ששם זה מאונקלד-require) זה יכתוב לי localhost ולא hey.

avatar ענה משתמש_93144 ב 26 לינואר 2012 #

ב setup.php אתה עורך פיזית את הקובץ config, לא סתם שם ערכים במערך.

avatar ענה Kzrh ב 26 לינואר 2012 #

ואיך אני עורך אותו פיזית?

avatar ענה cthulhu ב 26 לינואר 2012 #

@משתמש_93144
כי אין בזה צורך כאן. בשביל מה להפעיל פונקציות ולעשות מניפולציות עליו כשליצור מערך אחיד זה יהיה מהיר יותר ונוח יותר? חוץ מזה, הפורמט שלו טיפה שונה ממה שהוא רוצה.

ול-Kzrh - לא ברור לי מה הבעיה שלך. יש קובץ config.php שבו יש את המערך הנ"ל. יש לך את include/require שיכניסו לך את התוכן של הקובץ לקובץ אחר. זה שווה ערך ליצירת מערך באותו קובץ שאתה מאנקלד בו את config. אם זה לא עובד אז הסיבה היא שאתה מוציא איבר ממערך בטווח אחר (לא ב-global scope) או שאתה פשוט עשית משהו לא נכון.

avatar ענה משתמש_93144 ב 26 לינואר 2012 #

>> ואיך אני עורך אותו פיזית?
php.net/file_put_contents

avatar ענה Kzrh ב 26 לינואר 2012 #

אתה כנראה לא מבין cthulhu.
יש לי קובץ config וקובץ setup, אוקיי? בקובץ $config יש לי את זה:

$config = array();
$config['host'] = 'localhost';

בקובץ setup יש לי טופס ובו המשתמש צריך לרשום host.. את ה host שהמשתמש רושם אני רוצה לשים למשתנה $config['host']. אז בקובץ ה SETUP עשיתי ככה:
require 'config.php';

כאן יש את הטופס והכל...

$config['host'] = 'otherhost';

יש לי גם את קובץ האינדקס (Index.php) שגם בו יש את ה REQUIRE לקובץ הקונפיג. אז באינדקס עשיתי:
echo $config['host'];

אבל במקום שיציג לי otherhost זה הציג לי localhost (שזה הערך המקורי מהקובץ קונפיג, שניסיתי בעצם לשנות דרך ה SETUP).

avatar ענה cthulhu ב 26 לינואר 2012 #

עכשיו תעצור ותחשוב 20 שניות. למה זה קורה. כשתבין, אתה תעשה "אההההה".

avatar ענה Kzrh ב 26 לינואר 2012 #

אני יודע למה, כי המשתנה כבר מוגדר בקונפיג. מה שאני רוצה זה להגדיר אותו מחדש, פיזית. איך אני עושה את זה?

avatar ענה משתמש_94161 ב 26 לינואר 2012 #

http://php.net/file_put_contents